package com.yunke.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yunke.entity.YunkeHomeModule;

import java.util.List;

/**
 * 首页模块配置服务接口
 * 
 * @author yunke
 * @since 1.0.0
 */
public interface YunkeHomeModuleService extends IService<YunkeHomeModule> {

    /**
     * 创建模块
     */
    boolean createModule(YunkeHomeModule module);

    /**
     * 更新模块
     */
    boolean updateModule(YunkeHomeModule module);

    /**
     * 删除模块
     */
    boolean deleteModule(Long id);

    /**
     * 批量删除模块
     */
    boolean deleteModules(List<Long> ids);

    /**
     * 分页查询模块列表
     */
    IPage<YunkeHomeModule> getModulePage(Integer current, Integer size,
                                        Integer moduleType, String displayPosition,
                                        String moduleName, Boolean isEnabled);

    /**
     * 根据ID查询模块详情
     */
    YunkeHomeModule getModuleById(Long id);

    /**
     * 根据位置查询模块列表
     */
    List<YunkeHomeModule> getModulesByPosition(String displayPosition, Integer targetUser, Boolean isEnabled);

    /**
     * 根据类型查询模块列表
     */
    List<YunkeHomeModule> getModulesByType(Integer moduleType, Boolean isEnabled);

    /**
     * 查询首页展示模块
     */
    List<YunkeHomeModule> getHomeModules(Integer targetUser);

    /**
     * 启用模块
     */
    boolean enableModule(Long id);

    /**
     * 禁用模块
     */
    boolean disableModule(Long id);

    /**
     * 置顶模块
     */
    boolean topModule(Long id);

    /**
     * 取消置顶模块
     */
    boolean untopModule(Long id);

    /**
     * 批量更新模块状态
     */
    boolean updateModuleStatus(List<Long> ids, Integer status);

    /**
     * 批量更新模块启用状态
     */
    boolean updateModuleEnabled(List<Long> ids, Boolean isEnabled);

    /**
     * 更新模块点击统计
     */
    boolean updateClickCount(Long id);

    /**
     * 更新模块浏览统计
     */
    boolean updateViewCount(Long id);

    /**
     * 统计模块数量
     */
    long countModules(Integer moduleType, String displayPosition, Boolean isEnabled);
} 